class ShortUrl < ActiveRecord::Base

  validates_presence_of :url, :message => "が空です"
  validates_uniqueness_of :url, :code
  validates_format_of :url, :with => URI.regexp(['http', 'https']), :message => "URLが正しくありませんよ"

  class << self

    # URLからインスタンスを取得
    # 無ければ新規作成
    def get_short_url(url)
      @short_url = find_by_url(url)
      unless @short_url
        @short_url = ShortUrl.create( :url => url )
        @short_url = nil if @short_url.new_record?
      end
      @short_url
    end
    
    # ランダムに未使用のIDを取得
    def get_rand_id
      newid = nil
      while(newid.nil?)
        _newid = rand(36**6)
        _url = ShortUrl.find_by_id(_newid)
        newid = _newid if _url.nil?
      end
      newid
    end
    def encode(num)
      num.to_s(36)
    end
    def decode(str)
      str.to_i(36)
    end
  end

  def before_create
    self.id = ShortUrl.get_rand_id
    self.code = ShortUrl.encode(self.id.to_i)
  end

  protected
  def validate
    errors.add( :url, "ごめん！Shur.inのURLは圧縮できないんだ。悪い事に使われちゃうからね。" ) if url =~ %r~#{SITE_URL}~
  end
  
end
